#ifndef SYMBOLEVALUE_H
#define SYMBOLEVALUE_H

#include <string.h>
#include <iostream>
using namespace std;

#include "Symbole.h"
#include "Arbre.h"


/*! \file SymboleValue.h
    \brief La spécification de la classe SymboleValue
    \author Cedric Vierne et Sergio Vasquez
    \date 18.04.2011
 */

/*! \class TableSymboles
    \brief La classe représentant de cnstruire une table de symboles.
 */


class SymboleValue :

    /*! \fn Symbole
        \brief un symbole valué est un symbole qui a une valeur, définie ou pas
    */ 
     public Symbole, 
        
    /*! \fn Noeud
        \brief  et c'est aussi une feuille de l'arbre abstrait
    */ 
     public Noeud  {
    
    
public:
    
    /*! \fn SymboleValue(Symbole s)
        \brief Permet de construire un symbole valué à partir d'un symbole existant s
    */ 
	  SymboleValue(Symbole s);
	  ~SymboleValue( ) {}
   
    /*! \fn afficher (unsigned short indentation=0)
        \brief Permet d'afficher le symbole en tant que noeud de l'arbre
    */ 
	  void        afficher (unsigned short indentation=0);
          
    /*! \fn getValeur() { return valeur;
        \brief accesseur
     *  \return valeur
    */    
	  inline int  getValeur()              { return valeur;                     }

    /*! \fn getValeur() { return valeur;
        \brief accesseur
     *
    */
	  inline void setValeur(int valeur)    { this->valeur=valeur; defini=true;  }

      /*! \fn estDefini(){ return defini
          \brief accesseur
     *
    */
	  inline bool estDefini()              { return defini;                     }

	  friend ostream & operator << (ostream & cout, SymboleValue symb); // affiche un symbole value sur cout

private:
     /*! \var bool defini
          \brief indique si la valeur du symbole est définie
     *
    */
	  bool defini;

      /*! \var int  valeur
          \brief valeur du symbole si elle est définie, zéro sinon
     *
    */
	  int  valeur;

};

#endif /* SYMBOLEVALUE_H */
